<?php

/*
 * Table/DiplomeTable.php
 */

namespace RHX\Model\Table;

use RHX\Model\Object\Diplome;
use Zend\Db\Adapter\Adapter;
use Zend\Db\TableGateway\AbstractTableGateway;
use Zend\Db\ResultSet\ResultSet;
use Zend\Db\Sql\Select;
use Zend\Db\Sql\Where;

class DiplomeTable extends AbstractTableGateway {

    /**
     * nom de la table
     *
     * @var string
     */
    protected $table = 'rh_diplome';

    /**
     * Constructeur
     *
     * @param \Zend\Db\Adapter\Adapter $adapter
     */
    public function __construct(Adapter $adapter) {
	$this->adapter			 = $adapter;
	$this->resultSetPrototype	 = new ResultSet();
	$this->resultSetPrototype->setArrayObjectPrototype(new Diplome($adapter));
	$this->initialize();
    }

    /**
     * Tous les diplomes
     *
     * @param string $order Champ d'ordre
     * @return type
     */
    public function getAll($order = 'libelle ASC') {
	return $this->select(function(Select $select)use($order) {
			    $select->order($order);
			});
    }

    /**
     * Récupérer un Diplome
     *
     * @param int $id
     * @return Diplome
     * @throws \Exception
     */
    public function get($id) {
	$row = $this->select(array('id' => $id))
		->current();
	if (!$row) {
	    throw new \Exception("Impossible de trouver le Diplome #$id");
	}

	return $row;
    }

    /**
     * Supprimmer un Diplome
     *
     * @param int $id Diplome à supprimer
     * @return int Nombre d'enregistrement affecté par la suppression
     */
    public function erase($id) {
	return $this->delete(array('id' => $id));
    }

    /**
     * Sauvegarder dans la base de données un Diplome
     *
     * @param \RHX\Model\Object\Diplome $diplome
     * @return int
     * @throws \Exception
     */
    public function save(Diplome $diplome) {
	$data	 = array(
	    'libelle'	 => $diplome->libelle,
	    'description'	 => $diplome->description,
	);
	$id	 = (int) $diplome->id;

	if ($id == 0) {
	    $this->insert($data);

	    return $this->lastInsertValue;
	}
	elseif ($this->get($id)) {
	    $this->update($data, array('id' => $id));

	    return $id;
	}
	else {
	    throw new \Exception("Impossible de sélectionner le Diplome #$id");
	}
    }

    /**
     * Exécuter une requête Brute SQL
     * 
     * @param string $sql
     * @return type
     */
    public function executeQuery($sql) {
	return $this->adapter
			->query($sql)
			->execute();
    }

}

?>
